﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;

namespace Tp2
{
    public partial class panier : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //On vérifie si on a modifier notre panier
            if (this.IsPostBack)
            {
                Panier modifPanier = (Panier)Session["panier"];
                //boucle vérifier si notre panier a été modifier
                for (int i = 0; i < modifPanier.Liste.Count; i++)
                {

                    //on commence par vérifier si on veut supprimer l'article
                    String noProduit = modifPanier.Liste[i].NoProduit.ToString();

                    String check = Request.Form[noProduit];

                    //Si on avait coché "supprimer" on retire l'objet du panier
                    if (check == "on")
                    {
                        modifPanier.supprimer(i);
                        i--;
                    }
                    else
                    {
                        //On va chercher la quantité qui a été sélectionné dans le <select>
                        //pour voir si on doit la modifier dans le panier
                        String qte = Request.Form["qte" + noProduit];

                        //On modifie seulement la quantité si elle à réelement été modifiée.
                        if (modifPanier.Liste[i].Quantite.ToString() != qte)
                        {
                            //On modifie la quantite
                            int intQte = Convert.ToInt32(qte);
                            modifPanier.Liste[i].Quantite = intQte;
                        }
                    }
                }

                //On modifie le panier
                Session["panier"] = modifPanier;
            }

            //Si on veut ajouter des article au panier (on s'assure qu'on ne veut pas supprimer)
            if (Request.QueryString["noproduit"] != null)
            {
                if ((Session["panier"] == null) || (((Panier)Session["panier"]).Liste.Count == 0))
                {
                    //On affiche seulement le panier s'il n'est pas vide
                    this.btnAchat.Visible = false;
                }
                else
                {
                    this.btnAchat.Visible = true;
                }

                //On ajoute notre produit au panier (seulement la premiere fois que la page est appelé)
                if ((Request.QueryString["noproduit"] != null) && (!this.IsPostBack))
                {
                    //On créé un produit
                    Produit p = new Produit(Convert.ToInt32(Request.QueryString["noproduit"]));
                    AjouterAuPanier(p);
                }
            }

            //Affichage du panier
            if ((Session["panier"] == null) || (((Panier)Session["panier"]).Liste.Count == 0)) //Le panier est vide (on affiche pas le bouton pour proceder à l'achat)
            {
                this.contenuPanier.InnerHtml = "Votre panier d'achat est vide.";
                this.btnModifier.Visible = false;
                this.btnAchat.Visible = false;
            }
            else
            {
                //On affiche le bouton permetant de modifier le panier
                this.btnModifier.Visible = true;

                //Si on est connecté, on permet de passer à l'achat
                if (Session["login"] != null)
                    btnAchat.Visible = true;
                else
                    btnAchat.Visible = false;

                //on initialise le contenu de notre html du panier (sinon cause problème dans le PostBack)
                this.contenuPanier.InnerHtml = "";

                //On affiche le panier d'achat
                Panier panier = (Panier)Session["panier"];

                //On créé les variable de lecture de bd
                SqlConnection connexion;
                SqlCommand commande;
                SqlDataReader lecteur;

                String cheminBD = Server.MapPath("App_Data/TP2.mdf");
                String chaineConnexion = "Data Source=.\\SQLEXPRESS;AttachDbFilename=" + cheminBD + ";Integrated Security=True;User Instance=True";

                connexion = new SqlConnection(chaineConnexion);

                //Ouverture de la connexion
                connexion.Open();

                //Boucle pour afficher tout les article du panier
                for (int i = 0; i < panier.Liste.Count; i++)
                {
                    //On va chercher les informations du produit dans la BD
                    String requete = "SELECT * FROM disques WHERE noProduit=" + panier.Liste[i].NoProduit.ToString();

                    commande = new SqlCommand(requete, connexion);
                    lecteur = commande.ExecuteReader();
                    lecteur.Read();

                    //On affiche les informations
                    this.contenuPanier.InnerHtml += "<p>";
                    this.contenuPanier.InnerHtml += "<span class=\"produit\"><div class=\"gras\">" + Convert.ToString(lecteur["titre"]) + "</div>";
                    this.contenuPanier.InnerHtml += "<img src=\"Images/Produits/" + Convert.ToString(lecteur["image"]) + "\" alt=\"" + Convert.ToString(lecteur["image"]) + "\" />";
                    this.contenuPanier.InnerHtml += " Quantité : ";

                    //Boucle pour aller chercher la quantité dans la bd
                    this.contenuPanier.InnerHtml += "<select name=\"qte" + Convert.ToString(lecteur["noProduit"]) + "\" id=\"qte" + Convert.ToString(lecteur["noProduit"]) + "\">";
                    this.contenuPanier.InnerHtml += "<option selected=\"selected\">0</option>";

                    //Boucle pour afficher les quantitées
                    int qte = Convert.ToInt32(lecteur["qte"]);
                    for (int j = 1; j <= qte; j++)
                    {
                        //On vérifie quel qui est déjà sélectionné
                        if (j == panier.Liste[i].Quantite)
                        {
                            this.contenuPanier.InnerHtml += "<option selected=\"selected\">" + j.ToString() + "</option>";
                        }
                        else
                        {
                            this.contenuPanier.InnerHtml += "<option>" + j.ToString() + "</option>";
                        }
                    }
                    this.contenuPanier.InnerHtml += "</select> x ";
                    this.contenuPanier.InnerHtml += Convert.ToString(lecteur["prix"]) + " $ ";
                    this.contenuPanier.InnerHtml += "<input type=\"checkbox\" name=\"" + Convert.ToString(lecteur["noProduit"]) + "\" id=\"" + Convert.ToString(lecteur["noProduit"]) + "\" runat=\"server\" />";
                    this.contenuPanier.InnerHtml += " Retirer du panier";
                    this.contenuPanier.InnerHtml += "</span>";
                    this.contenuPanier.InnerHtml += "</p>";
                    this.contenuPanier.InnerHtml += "<div class=\"separateur\"></div>";
                    lecteur.Close();
                }

                //Affichage du total du panier
                this.contenuPanier.InnerHtml += "<div><span class=\"gras\">Total Panier : "+TotalPanier().ToString()+"$ (Taxes non-incluses)</span></div>";
                //Fermeture de la connexion de la BD
                connexion.Close();

            }
        }

        private double TotalPanier()
        {
            double total = 0.0;

            //On vérifie si on a bien un panier
            if (Session["panier"] != null)
            {
                Panier panier = (Panier)Session["panier"];

                SqlConnection connexion;
                SqlCommand commande;
                SqlDataReader lecteur;

                 String cheminBD = Server.MapPath("App_Data/TP2.mdf");
                String chaineConnexion = "Data Source=.\\SQLEXPRESS;AttachDbFilename=" + cheminBD + ";Integrated Security=True;User Instance=True";

                connexion = new SqlConnection(chaineConnexion);

                //Ouverture de la connexion
                connexion.Open();

                for (int i = 0; i < panier.Liste.Count; i++)
                {
                    //Requete pour aller chercher le prix de l'article
                    String requete = "SELECT prix FROM disques WHERE noProduit=" + panier.Liste[i].NoProduit.ToString();

                    commande = new SqlCommand(requete, connexion);
                    lecteur = commande.ExecuteReader();
                    lecteur.Read();

                    //on calcul le prix total du panier
                    double prix = Convert.ToDouble(lecteur["prix"]);
                    total += prix * panier.Liste[i].Quantite;

                    lecteur.Close();
                }

                connexion.Close();
            }

            return total;
        }

        private void AjouterAuPanier(Produit p_Produit)
        {
            Panier p = (Panier)Session["panier"];

            if (Session["panier"] == null)
            {
                Panier panier = new Panier();
                //On ajoute notre item au panier;
                panier.ajouter(p_Produit);

                //On créé notre session panier
                Session["panier"] = panier;
            }
            else
            {
                //On ajoute l'article au panier et on le remet dans la session
                Panier panier = (Panier)Session["panier"];

                //On vérifie si le produit n'est pas déjà dans le panier
                bool present = false;
                int i = 0;

                while ((!present) && (i < panier.Liste.Count))
                {
                    //On s'assure de ne pas rajouter 2 fois le même article au panier
                    if (panier.Liste[i].NoProduit == Convert.ToInt32(Request.QueryString["noproduit"]))
                        present = true;

                    i++;
                }

                if (!present)
                {
                    //On ajoute le produit au panier
                    panier.ajouter(p_Produit);

                    //on modifie le panier en session
                    Session["panier"] = panier;
                }
            }
        }
    }
}